package com.nave.segundaguerra.servidorecliente.cliente;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;

import android.content.Context;
import android.graphics.Point;
import android.graphics.PointF;
import android.util.Log;

import com.nave.segundaguerra.activity.ConnectionSet;
import com.nave.segundaguerra.servidorecliente.servidor.PlayerServer;
import com.nave.segundaguerra.servidorecliente.util.ActivityUtil;
import com.nave.segundaguerra.servidorecliente.util.Connection;
import com.nave.segundaguerra.servidorecliente.util.DataHandler;
import com.nave.segundaguerra.servidorecliente.util.Protocolo;

public class ControleDeUsuarioCliente implements DataHandler {

	private ConcurrentHashMap<String, PlayerCliente> jogadores;
	private List<TiroCliente> tiroList = new ArrayList<TiroCliente>();
	private List<ItemCliente> itemList = new ArrayList<ItemCliente>();

	public ControleDeUsuarioCliente() {
		jogadores = new ConcurrentHashMap<String, PlayerCliente>();
	}

	// Receive Server Data
	public void execute(Connection origem, String linha) {

		Log.e("ReciboCliente", linha);
		
		ActivityUtil.Show(linha);
		if (linha.startsWith(Protocolo.PROTOCOL_ID)) {

			//String[] lista = linha.split(":");
			moveUsuario(origem, linha);
		}
	
		if (linha.startsWith(Protocolo.PROTOCOL_MOVE)) {

			// String[] lista = linha.split(":");
			moveUsuario(origem, linha);
		}

		if (linha.startsWith(Protocolo.PROTOCOL_SHOOT)) {

			// String[] lista = linha.split(":");
			// moveTiros(origem, lista[1]);
		}

		if (linha.startsWith(Protocolo.PROTOCOL_ITEM)) {
			// String[] lista = linha.split(":");
			// InstantiateCaixa(origem, lista[1]);
		}
	}

	public void sendPosition(String name, PointF point)
	{
		
		
	}
	
	public void moveUsuario(Connection origem, String linha) {
		
		String[] lista = linha.split(";");
		for (String um : lista) {
			String[] separado = um.split(",");
			String nome = separado[1];
			int x = Integer.parseInt(separado[2]);
			int y = Integer.parseInt(separado[3]);
			String time = separado[4];
			String classe = separado[5];
			
			PlayerCliente jogador = jogadores.get(nome);
			if (jogador == null) {
				 jogador = new SoldadoCliente(nome, new Point(x, y));
				//jogador = selecionarPlayerCliente(classe, nome, new Point(x, y));
				jogador.setTime(time);
				jogadores.put(nome, jogador);
			} else {
				// jogador.setX(x);
				// jogador.setY(y);
				jogador.setPosition(new Point(x, y));
			}
		}
	}

	private PlayerCliente selecionarPlayerCliente(String classe, String nome,
			Point position) {

		if (classe.equals("General")) {
			GeneralCliente general = new GeneralCliente(nome, position);
			return general;
		} else if (classe.equals("Soldado")) {
			SoldadoCliente soldado = new SoldadoCliente(nome, position);
			return soldado;
		} else {
			MedicoCliente medico = new MedicoCliente(nome, position);
			return medico;
		}
	}

	public void moveTiros(Connection origem, String linha) {

		tiroList.clear();

		String[] lista = linha.split(";");
		int i = 0;
		for (String um : lista) {
			String[] separado = um.split(",");
			int x = Integer.parseInt(separado[0]);

			int y = Integer.parseInt(separado[1]);

			tiroList.add(i, new TiroCliente(new Point(x, y)));
			i++;
		}
	}

	public void InstantiateCaixa(Connection origem, String linha) {
		Log.i("Caixa !", "Caixaaaaa");
		String[] lista = linha.split(";");

		int i = 0;
		for (String um : lista) {
			String[] separado = um.split(",");
			int x = Integer.parseInt(separado[0]);

			int y = Integer.parseInt(separado[1]);

			itemList.add(i, new ItemCliente(new Point(x, y)));
			i++;
			Log.i("Caixa !", "adicionando na lista");
		}

	}

	public void playGame() {

//		PlayerCliente meuJogador = GerenciadorActivity.GetInstance()
//				.getPlayer();
//		PlayerCliente jogador = jogadores.get(meuJogador.getNome());
//		if (jogador == null) {
//			jogadores.put(meuJogador.getNome(), meuJogador);
//		}
	}

	// GETTERS AND SETTERS
	public ConcurrentHashMap<String, PlayerCliente> getJogadores() {
		return jogadores;
	}

	public List<TiroCliente> getListTiros() {
		return this.tiroList;
	}

	public List<ItemCliente> getItemList() {
		return this.itemList;
	}

	public void setListTiros(List<TiroCliente> list) {
		this.tiroList = list;
	}
}
